package com.rjkj.medicalwaste.ui.my

import android.text.InputFilter
import android.text.Spanned
import java.util.regex.Pattern

class NumberEditInputFilter(val maxValue: Int,val PONTINT_LENGTH:Int = 2) : InputFilter {


    var p: Pattern? = null
    init {
        p = Pattern.compile("[0-9]*") //除数字外的其他的
    }


    /**
     * source    新输入的字符串
     * start    新输入的字符串起始下标，一般为0
     * end    新输入的字符串终点下标，一般为source长度-1
     * dest    输入之前文本框内容
     * dstart    原内容起始坐标，一般为0
     * dend    原内容终点坐标，一般为dest长度-1
     */
    override fun filter(src: CharSequence, start: Int, end: Int, dest: Spanned, dstart: Int, dend: Int): CharSequence? {
        val oldtext = dest.toString()
        println(oldtext)
        //验证删除等按键
        if ("" == src.toString()) {
            return null
        }
        //验证非数字或者小数点的情况
        val m = p!!.matcher(src)
        if (oldtext.contains(".")) {
            //已经存在小数点的情况下，只能输入数字
            if (!m.matches()) {
                return null
            }
        } else {
            //未输入小数点的情况下，可以输入小数点和数字
            if (!m.matches() && src != ".") {
                return null
            }
        }
        //验证输入金额的大小
        if (src.toString() != "") {
            val dold: Double = try {
                (oldtext + src.toString()).toDouble()
            } catch (e: NumberFormatException) {
                e.printStackTrace()
                return dest.subSequence(dstart, dend)
            }
            if (dold > maxValue) {
                return dest.subSequence(dstart, dend)
            } else if (dold == maxValue.toDouble()) {
                if (src.toString() == ".") {
                    return dest.subSequence(dstart, dend)
                }
            }
        }
        //验证小数位精度是否正确
        if (oldtext.contains(".")) {
            val index = oldtext.indexOf(".")
            val len = dend - index
            //小数位只能2位
            if (len > PONTINT_LENGTH) {
                return dest.subSequence(dstart, dend)
            }
        }
        return dest.subSequence(dstart, dend).toString() + src.toString()
    }
}